"""
配置管理模块

该模块负责管理应用程序的全局配置，包括应用信息、服务器设置、
JWT配置、CORS配置、数据库配置和日志配置等。
支持从JSON配置文件加载配置。
"""

import os
import json
from typing import Optional, List


class Settings:
    """应用配置类
    
    管理应用程序的所有配置项，包括：
    1. 应用基本信息（名称、版本、描述）
    2. 服务器配置（主机、端口）
    3. JWT安全配置（密钥、算法、过期时间）
    4. CORS跨域配置
    5. 数据库配置
    6. 日志配置
    7. 开发模式设置
    8. API前缀设置
    """
    
    def __init__(self):
        """初始化配置"""
        # 尝试从JSON配置文件加载配置
        self._load_from_json()
    
    def _load_from_json(self):
        """从JSON配置文件加载配置"""
        try:
            config_path = os.path.join(os.path.dirname(__file__), '..', '..', 'config', 'app.json')
            with open(config_path, 'r', encoding='utf-8') as f:
                config = json.load(f)
            
            app_config = config.get('app', {})
            server_config = config.get('server', {})
            jwt_config = config.get('jwt', {})
            cors_config = config.get('cors', {})
            db_config = config.get('database', {})
            
            # 应用信息
            self.APP_NAME: str = app_config.get('name', '金融监控系统API')
            self.APP_VERSION: str = app_config.get('version', '1.0.0')
            self.APP_DESCRIPTION: str = app_config.get('description', '提供服务器监控、数据库状态、告警管理等功能')
            
            # 服务器配置
            self.HOST: str = server_config.get('host', '0.0.0.0')
            self.PORT: int = server_config.get('port', 10001)
            
            # JWT配置
            self.SECRET_KEY: str = jwt_config.get('secret_key', 'your-secret-key-change-in-production-9527')
            self.ALGORITHM: str = jwt_config.get('algorithm', 'HS256')
            self.ACCESS_TOKEN_EXPIRE_MINUTES: int = jwt_config.get('access_token_expire_minutes', 60)
            
            # CORS配置
            self.CORS_ORIGINS: list = cors_config.get('origins', [
                "http://localhost:10002",
                "http://localhost:5173",
                "http://127.0.0.1:10002",
                "http://127.0.0.1:5173",
            ])
            
            # 数据库配置(预留)
            self.DATABASE_URL: Optional[str] = None
            
            # 导入数据库配置
            from app.core.database_config import db_settings
            self.DB_HOST: str = db_settings.DB_HOST
            self.DB_PORT: int = db_settings.DB_PORT
            self.DB_USER: str = db_settings.DB_USER
            self.DB_PASSWORD: str = db_settings.DB_PASSWORD
            self.DB_NAME: str = db_settings.DB_NAME
            
            # 日志配置
            logging_config = config.get('logging', {})
            self.LOG_LEVEL: str = logging_config.get('level', 'info')
            
            # 开发模式
            self.DEBUG: bool = config.get('debug', True)
            
            # API前缀
            self.API_PREFIX: str = config.get('api_prefix', '/api')
            
        except Exception as e:
            print(f"警告: 无法加载JSON配置文件，使用默认配置: {e}")
            self._set_defaults()
    
    def _set_defaults(self):
        """设置默认配置"""
        # 应用信息
        self.APP_NAME: str = "金融监控系统API"
        self.APP_VERSION: str = "1.0.0"
        self.APP_DESCRIPTION: str = "提供服务器监控、数据库状态、告警管理等功能"
        
        # 服务器配置
        self.HOST: str = "0.0.0.0"
        self.PORT: int = 10001
        
        # JWT配置
        self.SECRET_KEY: str = "your-secret-key-change-in-production-9527"
        self.ALGORITHM: str = "HS256"
        self.ACCESS_TOKEN_EXPIRE_MINUTES: int = 60
        
        # CORS配置
        self.CORS_ORIGINS: list = [
            "http://localhost:10002",
            "http://localhost:5173",
            "http://127.0.0.1:10002",
            "http://127.0.0.1:5173",
        ]
        
        # 数据库配置(预留)
        self.DATABASE_URL: Optional[str] = None
        
        # 导入数据库配置
        from app.core.database_config import db_settings
        self.DB_HOST: str = db_settings.DB_HOST
        self.DB_PORT: int = db_settings.DB_PORT
        self.DB_USER: str = db_settings.DB_USER
        self.DB_PASSWORD: str = db_settings.DB_PASSWORD
        self.DB_NAME: str = db_settings.DB_NAME
        
        # 日志配置
        self.LOG_LEVEL: str = "info"
        
        # 开发模式
        self.DEBUG: bool = True
        
        # API前缀
        self.API_PREFIX: str = "/api"


# 创建全局配置实例
settings = Settings()